package com.br.apurn.controller;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import org.primefaces.event.FileUploadEvent;

import com.br.apurn.model.CaminhoFoto;
import com.br.apurn.model.News;
import com.br.apurn.model.service.NewsService;
import com.br.apurn.model.service.NewsServiceImpl;

@ManagedBean
@SessionScoped
public class NewsMBean {

	private NewsService newsService = NewsServiceImpl.getInstance();

	private News noticia;
	private News noticiaselecionada;
	List<CaminhoFoto> listacaminhos = new ArrayList(); 
	private String caminhorelativo;

	public String getCaminhorelativo() {
		return caminhorelativo;
	}

	public void setCaminhorelativo(String caminhorelativo) {
		this.caminhorelativo = caminhorelativo;
	}

	public NewsMBean() {
		noticia = new News();
	}

	public News getNoticiaselecionada() {
		try {
			System.out.println("Pedindo noticia selecionada: nome"
					+ noticiaselecionada.getTitle() + " conteudo: "
					+ noticiaselecionada.getContent());
		} catch (Exception e) {
			System.out.println("get noticiaselecionada NULL");
		}
		return noticiaselecionada;
	}

	public void setNoticiaselecionada(News noticiaselecionadarecebida) {
		try {
			System.out.println("SETANDO noticia selecionada: nome"
					+ noticiaselecionadarecebida.getTitle() + " conteudo: "
					+ noticiaselecionadarecebida.getContent());
		} catch (Exception e) {
			System.out.println("SET noticiaselecionada NULL");
		}
		this.noticiaselecionada = noticiaselecionadarecebida;
	}

	public String save() {
		
		newsService.save(noticia);
		newsService.savecaminhos(listacaminhos);
		noticia = new News();
		return null;
	}

	public String paginaEditar() {
		return "editarNoticia.jsf";
	}

	public String edit() {
		// pega o parametro passado no link
		// Integer id = Integer.parseInt((String) FacesContext
		// .getCurrentInstance().getExternalContext()
		// .getRequestParameterMap().get("id"));
		newsService.update(noticiaselecionada);
		return "noticiasAdmin.jsf";
	}

	public String delete() {
		// pega o parametro passado no link
		/*
		 * Integer id = Integer.parseInt((String) FacesContext
		 * .getCurrentInstance().getExternalContext()
		 * .getRequestParameterMap().get("id"));
		 */
		System.out.println("Imprimindo id: " + noticiaselecionada.getId());
		newsService.delete(noticiaselecionada.getId());
		return "noticiasAdmin.jsf";
	}

	public void handleFileUpload(FileUploadEvent event) throws IOException {
		System.out.println("handleFileUpload chamad!!!!");
		
		System.out.println("antes de pegar o caminho");
		String caminho = FacesContext.getCurrentInstance().getExternalContext()
				.getRealPath("" + "\\fotos\\" + event.getFile().getFileName());
		caminhorelativo = new String("" + "\\fotos\\" + event.getFile().getFileName());
		CaminhoFoto cf = new CaminhoFoto();
		cf.setCaminho(caminhorelativo);
		cf.setNews(noticia);
		listacaminhos.add(cf);
		
		System.out.println("Salvando no caminho" + caminho);

		byte[] conteudo = event.getFile().getContents();
		FileOutputStream fos = new FileOutputStream(caminho);
		fos.write(conteudo);
		fos.close();
		FacesMessage msg = new FacesMessage("Sucesso", event.getFile()
				.getFileName() + " foi carregado." +
				"Caminho: " + caminhorelativo);
		FacesContext.getCurrentInstance().addMessage("teste", msg);
	}

	// getters e setters
	public News getNoticia() {
		return noticia;
	}

	public void setNoticia(News noticia) {
		this.noticia = noticia;
	}

	public List<News> getTodasNoticias() {
		return newsService.listAllNotices();
	}

	public DataModel getTodasNoticiasDataModel() {

		DataModel model = new ListDataModel(newsService.listAllNotices());
		return model;
	}
}